/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.quality4spl.fm.cvm.util;

import java.util.List;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;

import org.quality4spl.fm.cvm.*;

/**
 * <!-- begin-user-doc -->
 * The <b>Switch</b> for the model's inheritance hierarchy.
 * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
 * to invoke the <code>caseXXX</code> method for each class of the model,
 * starting with the actual class of the object
 * and proceeding up the inheritance hierarchy
 * until a non-null result is returned,
 * which is the result of the switch.
 * <!-- end-user-doc -->
 * @see org.quality4spl.fm.cvm.CvmPackage
 * @generated
 */
public class CvmSwitch<T> {
	/**
	 * The cached model package
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected static CvmPackage modelPackage;

	/**
	 * Creates an instance of the switch.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public CvmSwitch() {
		if (modelPackage == null) {
			modelPackage = CvmPackage.eINSTANCE;
		}
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	public T doSwitch(EObject theEObject) {
		return doSwitch(theEObject.eClass(), theEObject);
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	protected T doSwitch(EClass theEClass, EObject theEObject) {
		if (theEClass.eContainer() == modelPackage) {
			return doSwitch(theEClass.getClassifierID(), theEObject);
		}
		else {
			List<EClass> eSuperTypes = theEClass.getESuperTypes();
			return
				eSuperTypes.isEmpty() ?
					defaultCase(theEObject) :
					doSwitch(eSuperTypes.get(0), theEObject);
		}
	}

	/**
	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @return the first non-null result returned by a <code>caseXXX</code> call.
	 * @generated
	 */
	protected T doSwitch(int classifierID, EObject theEObject) {
		switch (classifierID) {
			case CvmPackage.CVM_ELEMENT: {
				CVMElement cvmElement = (CVMElement)theEObject;
				T result = caseCVMElement(cvmElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABILITY_MODEL_ELEMENT: {
				VariabilityModelElement variabilityModelElement = (VariabilityModelElement)theEObject;
				T result = caseVariabilityModelElement(variabilityModelElement);
				if (result == null) result = caseCVMElement(variabilityModelElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABILITY_MODEL: {
				VariabilityModel variabilityModel = (VariabilityModel)theEObject;
				T result = caseVariabilityModel(variabilityModel);
				if (result == null) result = caseVariabilityModelElement(variabilityModel);
				if (result == null) result = caseNamedElement(variabilityModel);
				if (result == null) result = caseUserAttributeTypeContext(variabilityModel);
				if (result == null) result = caseCVMElement(variabilityModel);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABILITY_MODEL_ENTRY: {
				VariabilityModelEntry variabilityModelEntry = (VariabilityModelEntry)theEObject;
				T result = caseVariabilityModelEntry(variabilityModelEntry);
				if (result == null) result = caseVariabilityModelElement(variabilityModelEntry);
				if (result == null) result = caseNamedElement(variabilityModelEntry);
				if (result == null) result = caseUserAttributeTypeContext(variabilityModelEntry);
				if (result == null) result = caseCVMElement(variabilityModelEntry);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABILITY_MODEL_FOLDER: {
				VariabilityModelFolder variabilityModelFolder = (VariabilityModelFolder)theEObject;
				T result = caseVariabilityModelFolder(variabilityModelFolder);
				if (result == null) result = caseVariabilityModelEntry(variabilityModelFolder);
				if (result == null) result = caseVariabilityModelElement(variabilityModelFolder);
				if (result == null) result = caseNamedElement(variabilityModelFolder);
				if (result == null) result = caseUserAttributeTypeContext(variabilityModelFolder);
				if (result == null) result = caseCVMElement(variabilityModelFolder);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_DIAGRAM: {
				FeatureDiagram featureDiagram = (FeatureDiagram)theEObject;
				T result = caseFeatureDiagram(featureDiagram);
				if (result == null) result = caseFeatureModelElement(featureDiagram);
				if (result == null) result = caseNamedElement(featureDiagram);
				if (result == null) result = caseVariabilityModelElement(featureDiagram);
				if (result == null) result = caseCVMElement(featureDiagram);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_MODEL_ELEMENT: {
				FeatureModelElement featureModelElement = (FeatureModelElement)theEObject;
				T result = caseFeatureModelElement(featureModelElement);
				if (result == null) result = caseVariabilityModelElement(featureModelElement);
				if (result == null) result = caseCVMElement(featureModelElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_MODEL: {
				FeatureModel featureModel = (FeatureModel)theEObject;
				T result = caseFeatureModel(featureModel);
				if (result == null) result = caseFeatureModelElement(featureModel);
				if (result == null) result = caseVariabilityModelEntry(featureModel);
				if (result == null) result = caseVariabilityModelElement(featureModel);
				if (result == null) result = caseNamedElement(featureModel);
				if (result == null) result = caseUserAttributeTypeContext(featureModel);
				if (result == null) result = caseCVMElement(featureModel);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE: {
				Feature feature = (Feature)theEObject;
				T result = caseFeature(feature);
				if (result == null) result = caseFeatureTreeNode(feature);
				if (result == null) result = caseNamedElement(feature);
				if (result == null) result = caseFeatureModelElement(feature);
				if (result == null) result = caseVariabilityModelElement(feature);
				if (result == null) result = caseCVMElement(feature);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_TREE_NODE: {
				FeatureTreeNode featureTreeNode = (FeatureTreeNode)theEObject;
				T result = caseFeatureTreeNode(featureTreeNode);
				if (result == null) result = caseFeatureModelElement(featureTreeNode);
				if (result == null) result = caseVariabilityModelElement(featureTreeNode);
				if (result == null) result = caseCVMElement(featureTreeNode);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.CARDINALITY: {
				Cardinality cardinality = (Cardinality)theEObject;
				T result = caseCardinality(cardinality);
				if (result == null) result = caseCVMElement(cardinality);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.INTERVAL: {
				Interval interval = (Interval)theEObject;
				T result = caseInterval(interval);
				if (result == null) result = caseCVMElement(interval);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_GROUP: {
				FeatureGroup featureGroup = (FeatureGroup)theEObject;
				T result = caseFeatureGroup(featureGroup);
				if (result == null) result = caseFeatureTreeNode(featureGroup);
				if (result == null) result = caseFeatureModelElement(featureGroup);
				if (result == null) result = caseVariabilityModelElement(featureGroup);
				if (result == null) result = caseCVMElement(featureGroup);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_LINK: {
				FeatureLink featureLink = (FeatureLink)theEObject;
				T result = caseFeatureLink(featureLink);
				if (result == null) result = caseFeatureModelElement(featureLink);
				if (result == null) result = caseVariabilityModelElement(featureLink);
				if (result == null) result = caseCVMElement(featureLink);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_CONSTRAINT: {
				FeatureConstraint featureConstraint = (FeatureConstraint)theEObject;
				T result = caseFeatureConstraint(featureConstraint);
				if (result == null) result = caseFeatureModelElement(featureConstraint);
				if (result == null) result = caseVariabilityModelElement(featureConstraint);
				if (result == null) result = caseCVMElement(featureConstraint);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.DEVIATION_ATTRIBUTE_SET: {
				DeviationAttributeSet deviationAttributeSet = (DeviationAttributeSet)theEObject;
				T result = caseDeviationAttributeSet(deviationAttributeSet);
				if (result == null) result = caseCVMElement(deviationAttributeSet);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.CONFIG_DECISION_MODEL: {
				ConfigDecisionModel configDecisionModel = (ConfigDecisionModel)theEObject;
				T result = caseConfigDecisionModel(configDecisionModel);
				if (result == null) result = caseConfigDecisionModelElement(configDecisionModel);
				if (result == null) result = caseVariabilityModelEntry(configDecisionModel);
				if (result == null) result = caseVariabilityModelElement(configDecisionModel);
				if (result == null) result = caseNamedElement(configDecisionModel);
				if (result == null) result = caseUserAttributeTypeContext(configDecisionModel);
				if (result == null) result = caseCVMElement(configDecisionModel);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.CONFIG_DECISION_MODEL_ENTRY: {
				ConfigDecisionModelEntry configDecisionModelEntry = (ConfigDecisionModelEntry)theEObject;
				T result = caseConfigDecisionModelEntry(configDecisionModelEntry);
				if (result == null) result = caseConfigDecisionModelElement(configDecisionModelEntry);
				if (result == null) result = caseVariabilityModelElement(configDecisionModelEntry);
				if (result == null) result = caseCVMElement(configDecisionModelEntry);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.CONFIG_DECISION: {
				ConfigDecision configDecision = (ConfigDecision)theEObject;
				T result = caseConfigDecision(configDecision);
				if (result == null) result = caseConfigDecisionModelEntry(configDecision);
				if (result == null) result = caseConfigDecisionModelElement(configDecision);
				if (result == null) result = caseVariabilityModelElement(configDecision);
				if (result == null) result = caseCVMElement(configDecision);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.CONFIG_DECISION_FOLDER: {
				ConfigDecisionFolder configDecisionFolder = (ConfigDecisionFolder)theEObject;
				T result = caseConfigDecisionFolder(configDecisionFolder);
				if (result == null) result = caseConfigDecisionModelEntry(configDecisionFolder);
				if (result == null) result = caseNamedElement(configDecisionFolder);
				if (result == null) result = caseConfigDecisionModelElement(configDecisionFolder);
				if (result == null) result = caseVariabilityModelElement(configDecisionFolder);
				if (result == null) result = caseCVMElement(configDecisionFolder);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.CONFIG_DECISION_MODEL_ELEMENT: {
				ConfigDecisionModelElement configDecisionModelElement = (ConfigDecisionModelElement)theEObject;
				T result = caseConfigDecisionModelElement(configDecisionModelElement);
				if (result == null) result = caseVariabilityModelElement(configDecisionModelElement);
				if (result == null) result = caseCVMElement(configDecisionModelElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_CONFIGURATION: {
				FeatureConfiguration featureConfiguration = (FeatureConfiguration)theEObject;
				T result = caseFeatureConfiguration(featureConfiguration);
				if (result == null) result = caseConfigDecisionModel(featureConfiguration);
				if (result == null) result = caseConfigDecisionModelElement(featureConfiguration);
				if (result == null) result = caseVariabilityModelEntry(featureConfiguration);
				if (result == null) result = caseVariabilityModelElement(featureConfiguration);
				if (result == null) result = caseNamedElement(featureConfiguration);
				if (result == null) result = caseUserAttributeTypeContext(featureConfiguration);
				if (result == null) result = caseCVMElement(featureConfiguration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.USER_ATTRIBUTE_TYPE: {
				UserAttributeType userAttributeType = (UserAttributeType)theEObject;
				T result = caseUserAttributeType(userAttributeType);
				if (result == null) result = caseCVMElement(userAttributeType);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.USER_ATTRIBUTE_VALUE: {
				UserAttributeValue userAttributeValue = (UserAttributeValue)theEObject;
				T result = caseUserAttributeValue(userAttributeValue);
				if (result == null) result = caseCVMElement(userAttributeValue);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.STRING_CONSTRAINING_TYPE: {
				StringConstrainingType stringConstrainingType = (StringConstrainingType)theEObject;
				T result = caseStringConstrainingType(stringConstrainingType);
				if (result == null) result = caseCVMElement(stringConstrainingType);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.FEATURE_MODEL_PROTOTYPE: {
				FeatureModelPrototype featureModelPrototype = (FeatureModelPrototype)theEObject;
				T result = caseFeatureModelPrototype(featureModelPrototype);
				if (result == null) result = caseNamedElement(featureModelPrototype);
				if (result == null) result = caseCVMElement(featureModelPrototype);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABLE_ENTITY: {
				VariableEntity variableEntity = (VariableEntity)theEObject;
				T result = caseVariableEntity(variableEntity);
				if (result == null) result = caseVariabilityModelFolder(variableEntity);
				if (result == null) result = caseVariabilityModelEntry(variableEntity);
				if (result == null) result = caseVariabilityModelElement(variableEntity);
				if (result == null) result = caseNamedElement(variableEntity);
				if (result == null) result = caseUserAttributeTypeContext(variableEntity);
				if (result == null) result = caseCVMElement(variableEntity);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABLE_PROPERTY: {
				VariableProperty variableProperty = (VariableProperty)theEObject;
				T result = caseVariableProperty(variableProperty);
				if (result == null) result = caseVariabilityModelElement(variableProperty);
				if (result == null) result = caseNamedElement(variableProperty);
				if (result == null) result = caseCVMElement(variableProperty);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABLE_ENTITY_PART: {
				VariableEntityPart variableEntityPart = (VariableEntityPart)theEObject;
				T result = caseVariableEntityPart(variableEntityPart);
				if (result == null) result = caseVariableProperty(variableEntityPart);
				if (result == null) result = caseVariabilityModelElement(variableEntityPart);
				if (result == null) result = caseNamedElement(variableEntityPart);
				if (result == null) result = caseCVMElement(variableEntityPart);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.ENTITY_CONFIGURATION: {
				EntityConfiguration entityConfiguration = (EntityConfiguration)theEObject;
				T result = caseEntityConfiguration(entityConfiguration);
				if (result == null) result = caseVariabilityModelEntry(entityConfiguration);
				if (result == null) result = caseVariabilityModelElement(entityConfiguration);
				if (result == null) result = caseNamedElement(entityConfiguration);
				if (result == null) result = caseUserAttributeTypeContext(entityConfiguration);
				if (result == null) result = caseCVMElement(entityConfiguration);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.CDM_APPLICATION: {
				CDMApplication cdmApplication = (CDMApplication)theEObject;
				T result = caseCDMApplication(cdmApplication);
				if (result == null) result = caseCVMElement(cdmApplication);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.NAMED_ELEMENT: {
				NamedElement namedElement = (NamedElement)theEObject;
				T result = caseNamedElement(namedElement);
				if (result == null) result = caseCVMElement(namedElement);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.USER_ATTRIBUTE_TYPE_CONTEXT: {
				UserAttributeTypeContext userAttributeTypeContext = (UserAttributeTypeContext)theEObject;
				T result = caseUserAttributeTypeContext(userAttributeTypeContext);
				if (result == null) result = caseCVMElement(userAttributeTypeContext);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.VARIABILITY_DIAGRAM: {
				VariabilityDiagram variabilityDiagram = (VariabilityDiagram)theEObject;
				T result = caseVariabilityDiagram(variabilityDiagram);
				if (result == null) result = caseVariabilityModelEntry(variabilityDiagram);
				if (result == null) result = caseVariabilityModelElement(variabilityDiagram);
				if (result == null) result = caseNamedElement(variabilityDiagram);
				if (result == null) result = caseUserAttributeTypeContext(variabilityDiagram);
				if (result == null) result = caseCVMElement(variabilityDiagram);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			case CvmPackage.NAME_SEQUENCE: {
				NameSequence nameSequence = (NameSequence)theEObject;
				T result = caseNameSequence(nameSequence);
				if (result == null) result = caseCVMElement(nameSequence);
				if (result == null) result = defaultCase(theEObject);
				return result;
			}
			default: return defaultCase(theEObject);
		}
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>CVM Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>CVM Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCVMElement(CVMElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variability Model Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variability Model Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariabilityModelElement(VariabilityModelElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variability Model</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variability Model</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariabilityModel(VariabilityModel object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variability Model Entry</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variability Model Entry</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariabilityModelEntry(VariabilityModelEntry object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variability Model Folder</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variability Model Folder</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariabilityModelFolder(VariabilityModelFolder object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Diagram</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Diagram</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureDiagram(FeatureDiagram object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Model Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Model Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureModelElement(FeatureModelElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Model</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Model</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureModel(FeatureModel object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeature(Feature object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Tree Node</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Tree Node</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureTreeNode(FeatureTreeNode object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Cardinality</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Cardinality</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCardinality(Cardinality object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Interval</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Interval</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseInterval(Interval object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Group</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Group</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureGroup(FeatureGroup object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Link</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Link</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureLink(FeatureLink object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Constraint</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Constraint</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureConstraint(FeatureConstraint object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Deviation Attribute Set</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Deviation Attribute Set</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseDeviationAttributeSet(DeviationAttributeSet object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Config Decision Model</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Config Decision Model</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConfigDecisionModel(ConfigDecisionModel object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Config Decision Model Entry</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Config Decision Model Entry</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConfigDecisionModelEntry(ConfigDecisionModelEntry object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Config Decision</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Config Decision</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConfigDecision(ConfigDecision object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Config Decision Folder</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Config Decision Folder</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConfigDecisionFolder(ConfigDecisionFolder object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Config Decision Model Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Config Decision Model Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseConfigDecisionModelElement(ConfigDecisionModelElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Configuration</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Configuration</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureConfiguration(FeatureConfiguration object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>User Attribute Type</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>User Attribute Type</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseUserAttributeType(UserAttributeType object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>User Attribute Value</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>User Attribute Value</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseUserAttributeValue(UserAttributeValue object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>String Constraining Type</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>String Constraining Type</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseStringConstrainingType(StringConstrainingType object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Feature Model Prototype</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Feature Model Prototype</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseFeatureModelPrototype(FeatureModelPrototype object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variable Entity</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variable Entity</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariableEntity(VariableEntity object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variable Property</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variable Property</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariableProperty(VariableProperty object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variable Entity Part</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variable Entity Part</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariableEntityPart(VariableEntityPart object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Entity Configuration</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Entity Configuration</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseEntityConfiguration(EntityConfiguration object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>CDM Application</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>CDM Application</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseCDMApplication(CDMApplication object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Named Element</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Named Element</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseNamedElement(NamedElement object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>User Attribute Type Context</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>User Attribute Type Context</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseUserAttributeTypeContext(UserAttributeTypeContext object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Variability Diagram</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Variability Diagram</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseVariabilityDiagram(VariabilityDiagram object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>Name Sequence</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>Name Sequence</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
	 * @generated
	 */
	public T caseNameSequence(NameSequence object) {
		return null;
	}

	/**
	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * <!-- begin-user-doc -->
	 * This implementation returns null;
	 * returning a non-null result will terminate the switch, but this is the last case anyway.
	 * <!-- end-user-doc -->
	 * @param object the target of the switch.
	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
	 * @generated
	 */
	public T defaultCase(EObject object) {
		return null;
	}

} //CvmSwitch
